/*
 * Fichier : Jeu_PFC.java
 * Version : 1.0.0
 * Auteurs : Alexandre BOURSIER & Nolan POTIER
 * 
 * Description : Classe singleton modélisant l'ensemble de règles définissant le jeu "pierre-feuille-ciseaux"
 */
package club.jeux.common;

public class Jeu_PFC extends Jeu {
    
    // Définir une instance unique utilisable pour chaque appel de jeu
    private static Jeu_PFC instance;

    /**
     * Retourner l'instance unique cible du jeu éponyme
     * @return l'instance unique cible du jeu éponyme
     */
    public static Jeu_PFC getInstance() {
        if (null == instance) { // Premier appel
            instance = new Jeu_PFC();
        }
        return instance;
    }

   /** 
    * Constructeur predéfini comme étant privé pour interdire
    * son appel et forcer à passer par la méthode 
    */
    private Jeu_PFC() {
        super();
    }
    
    @Override
    /**
     * Jouer une manche selon un ensemble de règles prédéfinies
     * @param ma la manche cible
     */
     public void jouer(Manche ma){
        Manche_PFC m = (Manche_PFC)ma;
        Resultat_PFC resultat = Resultat_PFC.INDEFINI;

        // Appliquer l'algorithme de jeu :
        // - Pierre l'emporte sur ciseaux
        // - Feuille l'emporte sur pierre
        // - Ciseaux l'emporte sur feuille
        if((m.getChoixOrdinateur().equals(Choix_PFC.PIERRE) && m.getChoixJoueur().equals(Choix_PFC.FEUILLE)) ||
           (m.getChoixOrdinateur().equals(Choix_PFC.FEUILLE) && m.getChoixJoueur().equals(Choix_PFC.CISEAUX)) || 
           (m.getChoixOrdinateur().equals(Choix_PFC.CISEAUX) && m.getChoixJoueur().equals(Choix_PFC.PIERRE))){
            resultat = Resultat_PFC.VICTOIRE;
        } else if (!m.getChoixOrdinateur().equals(m.getChoixJoueur())){
            resultat = Resultat_PFC.DEFAITE;
        }
        
        m.setResultat(resultat);
    }
}
